home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / DCDWriter$ElemProxy.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  5.0 KB  |  160 lines

  1. package com.extensibility.xml;
  2.  
  3. import java.util.Enumeration;
  4. import java.util.Vector;
  5.  
  6. public class DCDWriter$ElemProxy extends DCDWriter.DeclProxy {
  7.    // $FF: synthetic field
  8.    final DCDWriter this$0;
  9.    ElementDeclaration decl;
  10.    DCDWriter.AttrProxy attrProxy;
  11.  
  12.    DCDWriter$ElemProxy(DCDWriter var1) {
  13.       super((DCDWriter)null);
  14.       this.this$0 = var1;
  15.       this.attrProxy = new DCDWriter.AttrProxy(this.this$0);
  16.    }
  17.  
  18.    DCDWriter$ElemProxy(DCDWriter var1, ElementDeclaration var2) {
  19.       super((DCDWriter)null);
  20.       this.this$0 = var1;
  21.       this.attrProxy = new DCDWriter.AttrProxy(this.this$0);
  22.       this.setDecl(var2);
  23.    }
  24.  
  25.    void setDecl(ElementDeclaration var1) {
  26.       this.decl = var1;
  27.       super.setDecl(var1);
  28.    }
  29.  
  30.    public void write(SXE var1, boolean var2) {
  31.       var1.writeElem("ElementDef");
  32.       var1.writeAttr("Type", this.decl.getName());
  33.       ContentModel var3 = this.decl.getEffectiveModel();
  34.       this.writeModelAttrs(var1, var3);
  35.       if (var2) {
  36.          ((DCDWriter.DeclProxy)this).writeComments(var1);
  37.       }
  38.  
  39.       Vector var4 = new Vector();
  40.       Enumeration var5 = this.decl.getAttributes(false);
  41.  
  42.       while(var5.hasMoreElements()) {
  43.          AttributeGroupMember var6 = (AttributeGroupMember)var5.nextElement();
  44.          if (var6 instanceof AttributeDeclaration) {
  45.             this.attrProxy.setDecl((AttributeDeclaration)var6);
  46.             this.attrProxy.writeType(var1, var2);
  47.             var4.addElement(var6);
  48.          }
  49.       }
  50.  
  51.       Enumeration var10 = this.decl.getAttributes(true);
  52.  
  53.       while(var10.hasMoreElements()) {
  54.          AttributeGroupMember var7 = (AttributeGroupMember)var10.nextElement();
  55.          AttributeDeclaration var8 = (AttributeDeclaration)var7;
  56.          if (!var4.contains(var8)) {
  57.             this.attrProxy.setDecl((AttributeDeclaration)var7);
  58.             this.attrProxy.writeRef(var1, false);
  59.          }
  60.       }
  61.  
  62.       if (var3.isTagsOnly()) {
  63.          this.writeModel(var1, var3);
  64.       } else if (var3.isMixed()) {
  65.          var1.writeElem("Group", -1);
  66.          var1.writeAttr("Occurs", "ZeroOrMore");
  67.          ContentModelTermEnum var11 = ((ContentModelTerm)var3).getLeafTerms();
  68.  
  69.          while(var11.hasMoreElements()) {
  70.             ContentModelTerm var12 = var11.nextContentModelTerm();
  71.             CMTReferent var9 = var12.getReferent();
  72.             if (var9 instanceof ElementDeclaration) {
  73.                var1.writeElem("Element", -1);
  74.                var1.writeText(this.this$0.getQName(var12.getTerm(), Class.forName("com.extensibility.xml.ElementDeclaration")));
  75.                var1.flush("Element");
  76.             }
  77.          }
  78.  
  79.          var1.flush("Group");
  80.       }
  81.  
  82.       var1.flush("ElementDef");
  83.    }
  84.  
  85.    String getOccurs(ContentModelTerm var1) {
  86.       char var2 = var1.getOccurance();
  87.       if (var2 == 0) {
  88.          return "Required";
  89.       } else if (var2 == '?') {
  90.          return "Optional";
  91.       } else if (var2 == '+') {
  92.          return "OneOrMore";
  93.       } else if (var2 == '*') {
  94.          return "ZeroOrMore";
  95.       } else {
  96.          throw new IllegalArgumentException(String.valueOf("Unknown occurance: ").concat(String.valueOf(var2)));
  97.       }
  98.    }
  99.  
  100.    void writeModelAttrs(SXE var1, ContentModel var2) {
  101.       var1.writeAttr("Content", "Closed");
  102.       if (var2.isAny()) {
  103.          var1.writeAttr("Model", "Any");
  104.       }
  105.  
  106.       if (var2.isEmpty()) {
  107.          var1.writeAttr("Model", "Empty");
  108.       } else if (var2.isTextOnly()) {
  109.          var1.writeAttr("Model", "Data");
  110.          if (this.decl.getDataType() != null) {
  111.             var1.writeAttr("Datatype", this.decl.getDataType().getSource());
  112.          }
  113.       } else if (var2.isMixed()) {
  114.          var1.writeAttr("Model", "Mixed");
  115.       } else if (var2.isTagsOnly()) {
  116.          var1.writeAttr("Model", "Elements");
  117.       }
  118.  
  119.    }
  120.  
  121.    void writeModel(SXE var1, ContentModelTerm var2) {
  122.       if (var2 instanceof ContentModel) {
  123.          ContentModelTermEnum var3 = var2.getTerms(true);
  124.  
  125.          while(var3.hasMoreElements()) {
  126.             ContentModelTerm var4 = (ContentModelTerm)var3.nextElement();
  127.             this.writeModel(var1, var4);
  128.          }
  129.       } else if (var2.isGroup()) {
  130.          var1.writeElem("Group", -1);
  131.          var1.writeAttr("RDF:Order", var2.getChildConnection() == ',' ? "Seq" : "Alt");
  132.          if (var2.getOccurance() != 0) {
  133.             var1.writeAttr("Occurs", this.getOccurs(var2));
  134.          }
  135.  
  136.          ContentModelTermEnum var5 = var2.getTerms(true);
  137.  
  138.          while(var5.hasMoreElements()) {
  139.             ContentModelTerm var6 = (ContentModelTerm)var5.nextElement();
  140.             this.writeModel(var1, var6);
  141.          }
  142.  
  143.          var1.flush("Group");
  144.       } else {
  145.          if (var2.getOccurance() != 0) {
  146.             var1.writeElem("Group", -1);
  147.             var1.writeAttr("Occurs", this.getOccurs(var2));
  148.          }
  149.  
  150.          var1.writeElem("Element", -1);
  151.          var1.writeText(this.this$0.getQName(var2.getTerm(), Class.forName("com.extensibility.xml.ElementDeclaration")));
  152.          var1.flush("Element");
  153.          if (var2.getOccurance() != 0) {
  154.             var1.flush("Group");
  155.          }
  156.       }
  157.  
  158.    }
  159. }
  160.